// 三种状态 状态一旦确定就不能更改
// then方法用来判断状态 被定义在原型对象上的
// value 表示成功之后的值， reason表示失败的原因
// 禁止返回promise对象本身，回出现循环调用

const Promise = require('./promise');

let promise = new Promise((resolve, reject) => {
    setTimeout(() => {resolve('成功')},2000)
    // reject('失败');
    throw new Error('执行错误')
})
// 后一个then拿到的值是上一个then方法的回调方法的返回值
// 有抛出错误的时候会在下一个rejece里面被抛出
promise.then(value => {
    console.log(value);
}, reason =>{
    console.log(reason);
});

let p1  = promise.then(value => {
    console.log(value);
    return p1;
}, reason =>{
    console.log(reason);
});

p1.then(value => {
    console.log(value);
}, reason => {
    console.log(reason);
})
promise.all(['a', 'b', p1, p2, 'c'])

